#pragma once
#include "Connection.hpp"
#include "Protocol.hpp"
#include "Caculate.hpp"

class Package
{

public:
    static void Parse(Connection *conn)
    {
        string package;
        Request req;
        Calculate cal;
        
        while (true)
        {

            // 判定读取的数据是否完整Decode
            package = Decode(conn->GetInbuffer());
            if (package.empty())
                break;

            // 到这里数据一定是完整的

            // 接下来就要将数据反序列化
            
            req.DeSerislize(package);

            Response resp = cal.Excute(req); //外部计算器处理逻辑

            //将数据再序列化
            string ret_str = resp.Serislize();
            //将序列化的数据添加报头
            Encode(ret_str);

            conn->Appendbuffer(ret_str);
        }

        if(!conn->Getoutbuffer().empty() && conn->_sender != nullptr)
        {
            conn->_sender(conn);
        }
    }

};